package com.wangdali.gulimall.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

//标注这是一个配置类
@Configuration
public class GulimallCorsConfiguration {
    @Bean
    public CorsWebFilter corsWebFilter(){
        /**
         * CorsWebFilter即Spring WebFlux中用于处理跨域资源共享（CORS）的过滤器
         * UrlBasedCorsConfigurationSource要选reactive的，因为Spring WebFlux是响应式编程，所以要使用响应式包下的类。
         *      UrlBasedCorsConfigurationSource，这是因为该代码是基于Spring WebFlux框架的响应式编程。
         * 在响应式编程中，程序的执行是异步的，非阻塞的，并且可以处理高并发的请求。因此，为了与框架
         * 和其他响应式组件进行良好的集成，需要使用响应式的类和接口。
         */
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();

//        1、配置跨域
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true); //允许携带cookie跨域

        source.registerCorsConfiguration("/**", corsConfiguration);

        return new CorsWebFilter(source);

    }
}
